Digital networks have been developed to facilitate the transfer of information, including data and programs, among digital computer systems and other digital devices. Typically in a network, the information is transferred for applications by means of protocol stacks each including a plurality layers which provide various types of services, including, for transmitting information, adding error detection and/or correction information to facilitate detection and/or correction of errors in the information transfer process, dividing the information into manageable blocks and adding block sequencing information, adding addressing and virtual circuit information to identify a destination device and application that is to receive the information and to facilitate transferring of the blocks through the network, and transforming the digital information into electrical or optical signals for transmission over the network. For receiving information, the protocol stacks perform the services in reverse, including, for example, transforming the electrical and/or optical signals into digital information, determining from the addressing information the application that is to receive the information, using the block sequencing information to aggregate the blocks into information to be provided to the application, and using the error detection and/or correction information to determine whether the information was correctly transferred.
One problem that has arisen in connection with transfer of information through a network is that many of the operations performed by the protocol stack are initiated by calls by the application transferring the information to services provided by other programs, which can provide a significant amount of overhead. To alleviate this, an architecture, described in the Virtual Interface Architecture ("VIA") specification, Version 1 (Dec. 16, 1997), published by Compaq Computer Corp., Intel Corp. and Microsoft Corp., has been proposed which essentially makes the network interface available to the application. The application itself may need to perform at least some of the operations otherwise performed by various layers in prior protocol stacks, but those can be performed without the need to calling other programs, with the accompanying overhead. However, a problem arises in connection with the architecture described in the VIA specification, namely, it does not provide a mechanism by which devices may notify each other of various conditions in connection with transfer of information therebetween, and in particular does not provide a mechanism whereby a device that is to receive a message can notify the device transmitting the message that the message was incorrectly transferred or not received over the virtual circuit, or a mechanism whereby a device can notify another device that it is in condition to receive information from the other device over a particular virtual circuit.